package com.yjz.leetcode.二叉树学习.二叉搜索树;

/**
 * @author :yuanJinZhong
 * @description: 二叉树接口
 * @date :2018/11/24-15:08
 */
public interface Tree<T extends Comparable<? extends T>> {
  /**
   * 查找
   *
   * @param data
   * @return
   */
  public Node<T> find(T data);

  /**
   * 插入
   *
   * @param data
   * @return
   */
  public boolean insert(T data);

  /**
   * 指定节点中序遍历(中序遍历&前序遍历&后续遍历 都是针对根节点而言的,俩个孩子节点都是先左后右)
   * 所以:中序遍历为:左子树->根节点->右子树
   * 前序遍历为:根节点->左子树->右子树
   * 后续遍历为:左子树->右子树->根节点
   *
   * @param node
   * @return
   */
  public void middleOrderIteration(Node node);

  /**
   * 指定节点前序遍历
   *
   * @param node
   */
  public void beforeOrderIteration(Node node);

  /**
   * 指定节点后续遍历
   *
   * @param node
   */
  public void afterOrderIteration(Node node);
}
